home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Netware Super Library
/
Netware Super Library.iso
/
pgm_tool
/
mdxdos23
/
multix.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-15
|
18KB
|
691 lines
#ifndef MultiXHIncluded
#define MultiXHIncluded
#define MultiXVersion 230
#define MultiXOldestVersionSupported 220
#define MUtilArrayIndexNew -1
#define MUtilQueueSeqInvalid -1
#define MUtilArrayIndexInvalid -2
#define MMdxXonChar 0x11
#define MMdxXoffChar 0x13
#define MMdxParityNone 0l
#define MMdxParityEven 0x80000000l
#define MMdxParityOdd 0xc0000000l
#define MMdxNoXonXoff 0x20000000l
#define MMdxWordSize8 0x10000000l
#define Use16
#define MsDosOs
#define StdCall __pascal
#define NoNetworkTranslation
#define TimerAjustValue 0l
/*
#define BEGIN {
#define END }
#define ELSE else
#define IF if (
#define THEN )
#define AND &&
#define OR ||
#define LAND &
#define LOR |
#define XOR ^
#define MOD %
#define SLAND(x,y) (x) &= (y)
#define SLOR(x,y) (x) |= (y)
#define SXOR(x,y) (x) ^= (y)
#define LANDE &=
#define LORE |=
#define XORE ^=
#define MODE %=
#define REPEAT do
#define UNTIL(x) while (x)
#define WHILE while (
#define FOREVER for(;;)
#define FOR for (
#define DO )
#define GETS =
#define EQ ==
#define NE !=
#define GE >=
#define LE <=
#define LT <
#define GT >
#define NOT !
#define LNEG ~
#define NOTEQ !=
*/
#define On 1
#define Off 0
#define MswGet(x) (UInt16)(((UInt32)(x)) >> 16)
#define LswGet(x) (UInt16)(((UInt32)(x)) LAND 0xffff)
#define MswSet(x,y) x GETS (y << 16) LOR LswGet(x)
#define LswSet(X,y) x GETS y LOR ((UInt32)(x) LAND 0xffff0000)
#define MakeFp(_Seg,_Off) ((FarPtr)(((UInt32)_Seg<<16) LOR _Off))
#define TypedMax(t,a,b) (t)(((t)(a) > (t)(b) ? (a) : (b)))
#define TypedMin(t,a,b) (t)(((t)(a) < (t)(b) ? (a) : (b)))
#define Max16(a,b) TypedMax(Int16,a,b)
#define Min16(a,b) TypedMin(Int16,a,b)
#define MaxU16(a,b) TypedMax(UInt16,a,b)
#define MinU16(a,b) TypedMin(UInt16,a,b)
#define Max32(a,b) TypedMax(Int32,a,b)
#define Min32(a,b) TypedMin(Int32,a,b)
#define MaxU32(a,b) TypedMax(UInt32,a,b)
#define MinU32(a,b) TypedMin(UInt32,a,b)
#define SwapInt16(_Num) (UInt16)((((UInt16)(_Num)) >> 8) LOR (((UInt16)(_Num)) << 8))
#define MIntSwap(_Int) \
(sizeof((_Int)) EQ sizeof(Int16) ? \
(int)SwapInt16((UInt16)(_Int)) : \
(int)SwapInt32((UInt32)(_Int)))
#define MIntSwapSet(_Int) _Int = MIntSwap(_Int)
#define MNetToHostInt(_Int) (_Int)
#define MHostToNetInt(_Int) (_Int)
#define MNetToHostIntSet(_Int)
#define MHostToNetIntSet(_Int)
#define NullP (void *)0
#define MByteArray(x) struct {char Byte[x];}
#define IsNullP(x) ((x) EQ NullP)
#define NotNullP(x) ((x) NE NullP)
#define IfNotNullP(x) IF (x) NE NullP THEN
#define IfNullP(x) IF (x) EQ NullP THEN
#define MCreateNew(_X) IfNullP((_X) GETS MdxCalloc(sizeof(*(_X)))) FatalError("No Memory");
#define MOccurs(_X) (sizeof(_X) / sizeof((_X)[0]))
#define FatalError(_ErrorText) FatalErrorHandler(_ErrorText)
typedef int Int16;
typedef unsigned UInt16;
typedef long Int32;
typedef unsigned long UInt32;
typedef unsigned short UShort;
typedef unsigned int TBit;
typedef int Int;
typedef unsigned int UInt;
typedef char Int8;
typedef unsigned char UInt8;
typedef double Double64;
typedef float Float32;
typedef Int32 TFileDescr;
typedef Int32 TLinkDescr;
typedef Int16 TSLinkDescr;
typedef Int16 TPtrArrayIndex;
typedef Int32 TIndex;
typedef UInt16 TSIndex;
typedef UInt16 TBufSize;
typedef Int32 TCounter;
typedef Int16 TSCounter;
typedef UInt16 TMdxObjectId;
typedef Int32 TQueueSeq;
typedef UInt32 TBaudRate;
typedef UInt32 TTimer;
typedef UInt32 TTimerId;
typedef UInt32 TTimerTag;
typedef Int32 TReqSeq;
typedef Int16 TSReqSeq;
typedef Int32 TListKey;
typedef UInt32 *UInt32Ptr;
typedef Int8 *Int8Ptr;
typedef UInt8 *UInt8Ptr;
typedef void Void;
typedef Int32 TMdxMsgSize;
typedef Int16 TMdxBlockNo;
typedef UInt16 TMdxMsgPri;
typedef Int32 TMdxProcId;
typedef Int16 TMdxMsgCode;
typedef UInt32 TMdxTime;
typedef UInt16 TMdxVersion;
typedef UInt8 TOnOff;
typedef Int8 TSResult;
typedef Int8 TSBoolean;
typedef MByteArray(30) TMdxLinkName;
typedef MByteArray(80) TMdxService;
typedef MByteArray(20) TMdxNetAddr;
typedef MByteArray(10) TMdxPassword;
typedef MByteArray(24) TMdxProcDescr;
#pragma pack(1)
typedef union TVarChar
{
Int16 Len;
Int8 Text[2];
} TVarChar;
#pragma pack()
typedef enum /* TMdxStartupAttributes */
{
MdxStartAsGateWay = 0x0001,
MdxUseDualEventQueues = 0x0002,
MdxReportAllProcesses = 0x0004,
MdxReportAllLinks = 0x0008,
MdxStartAsRouter = 0x0010,
MdxDisplayVersion = 0x4000
} TMdxStartupAttributes;
typedef enum
{
MdxLinkTypeAcceptOnly = 0, /* Indicates a server link type,
usually as a result of accept
on tcp/ip or something like that
*/
MdxLinkTypeFirst = 1,
MdxLinkTypeAsyncLocal = 1,
MdxLinkTypeNetBios = 2,
MdxLinkTypeTcpIpSocket = 3,
MdxLinkTypeNPipe = 4,
MdxLinkTypeAsyncModem = 5,
MdxLinkTypeX25 = 6,
MdxLinkTypeLoopBack = 7,
MdxLinkTypeSpxIpx = 8,
MdxLinkTypeLast
} TMdxLinkType;
typedef enum
{
MdxL2DlcProtoNone = 0,
MdxL2DlcProtoHdlc = 1
} TMdxL2DlcProtocol;
typedef enum
{
Failure = 0,
Success = 1
} TResult;
typedef enum
{
False = 0,
True = 1
} TBoolean;
typedef enum
{
MdxCallOk,
MdxInvalidPassword
} TMdxCallError;
typedef enum
{
L1WarnDontFreeSendBuf = -300 ,
L1ErrLinkNameMissing ,
L1ErrUnableToInitSocket ,
L1ErrAcceptError ,
L1ErrLinkNameTooLong ,
L1ErrInvalidLinkType ,
L1ErrTooManyLinks ,
L1ErrInvalidL1Ld ,
L1ErrUnableToOpenAsync ,
L1ErrUnableToSetupAsync ,
L1ErrUnableToCreateNPipe ,
L1ErrIllegalOperation ,
L1ErrInvalidReqCode ,
L1ErrTimeout ,
L2ErrTooManyLinks ,
L2ErrTooManyConnectRetries ,
L2ErrSendQueueFull ,
L2ErrSendBufferEmpty ,
L2ErrSendBufferTooBig ,
L2ErrMaxResetCount ,
L2ErrMaxPollCount ,
L2ErrInvalidConnectMode ,
L2ErrInvalidFd ,
L2ErrInvalidApprSeq ,
L2ErrInvalidFrameType ,
L2ErrInvalidReqCode ,
L2ErrConnectFailed ,
L2ErrNoResetResponse ,
L2ErrNoPollResponse ,
L3ErrProcessAlreadyDefined ,
L3ErrNoLinkAvailable ,
L3ErrSendBufferEmpty ,
L3ErrMsgCanceled ,
L3ErrInvalidReqCode ,
L3ErrProcessDoesNotExist ,
L3ErrNoGateWayAvailable ,
L4ErrMsgSendCanceled ,
L4ErrInvalidReqCode ,
L4ErrInvalidReqSeq ,
L5ErrProcessClosed ,
L5ErrInvalidReqCode ,
L6ErrInvalidReqCode ,
UtErrTooManyLinks ,
UtErrInvalidHashTable ,
UtErrDuplicateHashKey ,
UtErrHashKeyNotFound ,
UtErrInvalidStackTable ,
UtErrInvalidParam ,
TsrErrMsgNotFound ,
L2ErrMissingBuffer
} TMdxError;
typedef enum
{
DdeErrFirstError = -400,
DdeErrLastError = -381,
DbmErrFirstError = -380,
DbmErrLastError = -330,
MdxErrFirstError = -300,
MdxErrLastError = -201,
TpErrFirstError = -200,
TpErrLastError = -101,
MdErrSessionRestarted = -100,
MdErrMsgTimedOut,
MdErrMsgCanceled,
MdErrInvalidProcId,
MdErrUnableToOpenLink,
MdErrInvalidLinkLd,
MdErrInvalidDriverIndex,
MdErrLinkDisconnected,
MdErrDataReplyNotAllowed,
MdErrInvalidReplyInfo,
MdErrMsgIsEmpty,
MdErrInvalidEventCode,
MdErrLinkClosed,
MdErrLinkAlreadyOpened,
MdErrProcessNotReady,
MdErrNoMemory,
MdErrLinkTypeNotSupported,
MdErrNoError = 0
} TMdxApplError;
typedef enum
{
MdxDdeErrInvalidMsgCode = -400,
MdxDdeErrAdviseStopped,
MdxDdeErrInvalidDataFormat,
MdxDdeErrInvalidItem
} TMdxDdeError;
typedef enum
{
MdxConnectModeListen,
MdxConnectModeCall
} TMdxConnectMode;
typedef enum
{
MdxTimerEvent = 110,
MdxStdInAvailable = 111,
MdxIdleEvent = 120,
MdxL1L2EvConnectEnabled = 130,
MdxL1L2EvAcceptEnabled = 140,
MdxL1L2EvReadEnabled = 150,
MdxL1L2EvWriteEnabled = 160,
MdxL1L2EvLinkDisconnected = 170,
MdxL2L3EvSendComplete = 180,
MdxL2L3EvRecvComplete = 190,
MdxL2L3EvLinkClosed = 200,
MdxL2L3EvConnectComplete = 210,
MdxL2L3EvQueuesReset = 220,
MdxL2L3EvTransmitEnabled = 225,
MdxL2L3EvResumeTransmision = 227,
MdxL3L4EvMsgCancled = 230,
MdxL3L4EvMsgSentOk = 240,
MdxL3L4EvMsgReceived = 250,
MdxL3L4EvProcessReady = 260,
MdxL3L4EvProcessFailed = 270,
MdxL4L5EvMsgReceived = 280,
MdxL4L5EvControlMsgReceived = 285,
MdxL4L5EvMsgCancled = 290,
MdxL4L5EvMsgSentOk = 300,
MdxL4L5EvProcessReady = 310,
MdxL4L5EvProcessFailed = 320,
MdxL4L5EvProcessRestarted = 330,
MdxL4L5EvProcessConnected = 340,
MdxL5L6EvMsgReceived = 350,
MdxL5L6EvControlMsgReceived = 355,
MdxL5L6EvCallReqReceived = 360,
MdxL5L6EvCallRejected = 370,
MdxL5L6EvMsgCancled = 380,
MdxL5L6EvMsgSentOk = 390,
MdxL5L6EvCallCompleted = 400,
MdxL5L6EvProcessReady = 402,
MdxL5L6EvProcessNotReady = 404,
MdxEvDataMsgReceived = 410,
MdxEvDataReplyReceived = 420,
MdxEvSendMsgCompleted = 430,
MdxEvCallReqReceived = 440,
MdxEvCallRejected = 450,
MdxEvCallCompleted = 460,
MdxEvProcessReady = 462,
MdxEvProcessNotReady = 464,
MdxEventApplInit = 470,
MdxEvLinkStatus = 480,
MdxEvProcessAdded = 490,
MdxEvProcessRemoved = 491,
MdxEvNonMultiXDataReceived = 500,
MdxApplEventCodeFirst = 30000,
MdxApplEventCodeLast = 31000
} TMdxEventCode;
typedef enum
{
/* Application Assigned Attributes */
MdxResponseRequired = 0x0001,
MdxReportSuccess = 0x0002,
MdxReportError = 0x0004,
MdxResendOnRestart = 0x0008,
MdxReportAll = 0x0007,
MdxSendReliable = 0x000f,
MdxUseDataBuffer = 0x0010,
MdxUseDbProtection = 0x0020,
MdxUseMultiCast = 0x0040,
MdxDontUseAllocMod = 0x0100,
/* Kernel Assigned Attributes */
MdxL6IsReplyMsg = 0x1000
} TMdxSendAttr;
typedef enum
{
MdxL2EventHandlerIndex = 2,
MdxL3EventHandlerIndex = 3,
MdxL4EventHandlerIndex = 4,
MdxL5EventHandlerIndex = 5,
MdxL6EventHandlerIndex = 6,
MdxL7EventHandlerIndex = 7,
MdxTimerMgrEventHandlerIndex = 8,
MdxLinkMgrEventHandlerIndex = 9,
MdxProcMgrEventHandlerIndex = 10,
MdxEventHandlerIndexLast
} TMdxEventHandlerIndex;
typedef enum
{
MdxTpmFirstMsgCode = -32700,
MdxTpmLastMsgCode = -32601,
MdxMvxFirstMsgCode = -32500,
MdxMvxLastMsgCode = -32401,
MdxSqlFirstMsgCode = -32400,
MdxSqlLastMsgCode = -32351,
MdxDdeAdviseStartMsgCode = -32100,
MdxDdeAdviseDataMsgCode = -32099,
MdxDdeDataReqMsgCode = -32098,
MdxDdeDataReplyMsgCode = -32097,
MdxDdePokeMsgCode = -32096,
MdxDdeExecuteMsgCode = -32095
} TMdxReservedMsgCodes;
typedef enum
{
MdxDdeDataFormatIsText = 1
} TMdxDdeDataFormat;
typedef enum
{
MdxSeekStart,
MdxSeekFwrd,
MdxSeekBack,
MdxSeekEnd
} TMdxMsgSeekOrigin;
#pragma pack(2)
typedef struct TMdxMsg
{
TMdxObjectId Id;
TMdxMsgSize BytesRead;
void *Global;
} TMdxMsg;
typedef struct TMdxProtocol
{
TBoolean Supported;
void (*StartupRoutine)(void);
void (*CleanUpRoutine)(void);
TMdxError (*ServiceRoutine)(void *);
void (*EventHandler)(void *);
void (*SetPoll)(void);
void (*CheckPoll)(void);
} TMdxProtocol;
typedef enum
{
MdxL2NetDriverIndex = 0,
MdxL2RawDriverIndex = 2
} TMdxL2DriverIndex;
typedef enum
{
MdxL3NetDriverIndex = 0
} TMdxL3DriverIndex;
typedef enum
{
MdxLinkClosed,
MdxLinkDisconnected,
MdxLinkWaitConnect,
MdxLinkConnected
} TMdxLinkStatus;
typedef struct TMdxLinkParams
{
TLinkDescr Ld;
TMdxLinkType LinkType;
TMdxLinkName LinkName;
TBaudRate LinkBaud;
TOnOff UseDlcFraming;
TOnOff Ebcdic;
TMdxNetAddr NetAddr;
TMdxL2DriverIndex L2DriverIndex;
TMdxL3DriverIndex L3DriverIndex;
TMdxLinkStatus LinkStatus;
TMdxService Service;
TMdxConnectMode ConnectMode;
TTimer ConnectTimeout;
TTimer ConnectRetriesDelay;
TBufSize L1MaxSendSize;
TCounter MaxConnectRetries; /* L3 */
TTimer IdleTimeout; /* L3 */
TTimer ImAliveInterval; /* L3 */
TTimer PollInterval; /* L2 */
TSCounter MaxPollRetries; /* L2 */
TMdxProcId DefaultProcId;
} TMdxLinkParams;
typedef struct TMdxProcessParams
{
TMdxProcId ProcId;
TMdxPassword PasswordToSend;
TMdxPassword ExpectedPassword;
TTimer InactivityTimer;
TTimer ConnectRetriesInterval;
} TMdxProcessParams;
typedef struct TMdxApplTimerInfo
{
TTimerId TimerId;
Int16 Code;
TTimer Timer;
TTimerTag Tag1;
TTimerTag Tag2;
TTimerTag Tag3;
TCounter Count;
} TMdxApplTimerInfo;
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**** The internal structure of following structures are for ***/
/**** Application use. ***/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
typedef struct TMdxEvent
{
TMdxEventCode Code;
TLinkDescr Ld;
TMdxError Error;
TReqSeq ReqSeq;
TMdxProcId ProcId;
void *Data;
TBufSize DataCount;
TMdxEventHandlerIndex DataDestructorIndex;
TBoolean KeepEvent;
TMdxObjectId Id;
TTimer EventTimer;
} TMdxEvent;
/* Send / Receive Msg Info */
typedef struct TMdxSRMsgInfo
{
struct
{
TMdxMsg *Msg;
TMdxMsgCode MsgCode;
TMdxProcId SentFrom;
TQueueSeq SenderMsgId;
TMdxSendAttr SendAttr;
TMdxMsgPri MsgPri;
} Received;
struct
{
TMdxMsg *Msg;
TMdxMsgCode MsgCode;
} Sent;
} TMdxSRMsgInfo;
#pragma pack()
typedef void (cdecl * TEventHandler)(TMdxEvent *);
typedef void (cdecl * TEventDataDestructor)(TMdxEvent *);
extern TMdxProtocol StdCall ProtocolNotSupported(void);
extern TMdxTime StdCall MdxGetTime(void);
extern UInt32 StdCall MdxTimeTo_time_t(TMdxTime);
extern void *StdCall MdxAlloc(UInt32);
extern void *StdCall MdxCalloc(UInt32);
extern void *StdCall MdxRealloc(void *,UInt32);
extern void StdCall MdxFree(void *);
extern TTimer StdCall MdxGetCurrTimerValue(void);
extern TTimerId StdCall MdxSetApplTimer(Int16,TTimer,TTimerTag,
TTimerTag,TTimerTag,
TCounter);
extern void StdCall MdxClrTimer(TTimerId);
extern TResult StdCall MdxGetApplTimerInfo(void *,
TMdxApplTimerInfo *);
extern TMdxMsg *StdCall MdxMsgNew(TMdxMsgSize);
extern TMdxMsg *StdCall MdxMsgNewFile(Int8Ptr,UInt8Ptr,
TSCounter);
extern TMdxMsg *StdCall MdxMsgDup(TMdxMsg *);
extern TResult StdCall MdxMsgDelete(TMdxMsg *);
extern TResult StdCall MdxMsgAppend(TMdxMsg *,void *,
TBufSize);
extern TResult StdCall MdxMsgStore(TMdxMsg *,TMdxMsgSize,void *,
TBufSize);
extern TBufSize StdCall MdxMsgRead(TMdxMsg *,void *,
TBufSize);
extern TMdxMsgSize StdCall MdxMsgSeekRead(TMdxMsg *,TMdxMsgSize,TMdxMsgSeekOrigin);
extern TResult StdCall MdxMsgRewindRead(TMdxMsg *);
extern TMdxMsgSize StdCall MdxMsgSizeGet(TMdxMsg *);
extern TMdxError StdCall MdxSendMsg(TMdxProcId,TMdxMsg *,
TMdxMsgCode,TMdxMsgPri,
TMdxSendAttr,TReqSeq,TTimer);
extern TMdxError StdCall MdxSendData(TMdxProcId,void *,
TBufSize,TMdxMsgCode,
TMdxMsgPri,TMdxSendAttr,
TReqSeq,TTimer);
extern TMdxError StdCall MdxReply(TMdxSRMsgInfo *,TMdxError);
extern TMdxError StdCall MdxReplyWithData(TMdxSRMsgInfo *,
TMdxError,void *,
TBufSize,TMdxMsgCode,
TMdxMsgPri,TMdxSendAttr,
TReqSeq,TTimer);
extern TMdxError StdCall MdxReplyWithMsg(TMdxSRMsgInfo *,
TMdxError,TMdxMsg *,
TMdxMsgCode,TMdxMsgPri,
TMdxSendAttr,TReqSeq,
TTimer);
extern TMdxError cdecl MdxL3SendNonMultiXData(TMdxProcId,
UInt8Ptr,TBufSize);
extern TMdxError StdCall MdxConnectProcess(TMdxProcessParams *);
extern TMdxError StdCall MdxDisconnectProcess(TMdxProcId);
extern TMdxError cdecl MdxCheckProcessStatus(TMdxProcId);
extern TMdxError StdCall MdxAcceptProcess(TMdxProcId,TMdxPassword *);
extern TMdxError StdCall MdxRejectProcess(TMdxProcId,
TMdxCallError);
extern TMdxError cdecl MdxOpenLink(TMdxLinkParams *);
extern TMdxError cdecl MdxCloseLink(TLinkDescr);
extern TMdxError cdecl MdxCheckLinkStatus(TLinkDescr);
extern TMdxError cdecl MdxGetLinkParams(TMdxLinkParams *);
extern void cdecl MultiXStart(TMdxProcId,Int8Ptr,
TMdxStartupAttributes,
TEventHandler);
extern void cdecl MultiXWaitEvent(void);
extern void cdecl MultiXCheckEvent(void);
extern void cdecl MdxDeleteEvent(TMdxEvent *);
extern void cdecl FatalErrorHandler(Int8Ptr);
extern TMdxProcId cdecl MdxGetMyId(TMdxProcDescr *);
extern TMdxError cdecl MdxCreateApplEvent(TMdxEventCode,void*,TBufSize);
extern void StdCall TraceBuffer(Int16,void *,TBufSize);
extern int StdCall TruncSpace(void *,int,TBoolean);
#endif /* MultiXHIncluded */